package org.db.ui;

import java.util.List;

import javax.swing.JTable;

import org.db.Manager;
import org.db.dao.HoehenlinienDAO;

public class HoehenlinienTable extends JTable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 2518081906836443980L;

	private ColorTableCellRenderer renderer;

	public HoehenlinienTable() {
		setModel(new HoehenlinienTableModel());
		registerCellRenderer();
		// Tabelle initial mit bisherigen HöhenlinienElementen füllen
		((HoehenlinienTableModel) getModel()).addHoehenlinienElemente(Manager
				.getInstance().getHoehenlinienElemente());

	}

	public void addHoehenlinienElement(HoehenlinienDAO dao) {
		((HoehenlinienTableModel) getModel()).addHoehenlinienElement(dao);
	}

	public HoehenlinienDAO getElementAtRow(int row) {
		return ((HoehenlinienTableModel) getModel()).getElementAtRow(row);
	}

	public void replaceHoehenlinienElement(HoehenlinienDAO oldDao,
			HoehenlinienDAO newDao) {
		((HoehenlinienTableModel) getModel()).replaceHoehenlinienElement(
				oldDao, newDao);
	}

	public List<HoehenlinienDAO> getHoehenlinienElemente() {
		return ((HoehenlinienTableModel) getModel()).getHoehenlinienElemente();
	}

	private void registerCellRenderer() {
		renderer = new ColorTableCellRenderer();
		for (int i = 0; i < getColumnModel().getColumnCount(); i++) {
			getColumnModel().getColumn(i).setCellRenderer(renderer);
		}
	}

	public void removeHoehnlinienElement(HoehenlinienDAO dao) {
		((HoehenlinienTableModel) getModel()).removeHoehenlinienElement(dao);
	}

	public HoehenlinienDAO removeHoehenlinienElement(int rowIndex) {
		return ((HoehenlinienTableModel) getModel())
				.removeHoehenlinienElement(rowIndex);
	}

	public void refresh(HoehenlinienDAO dao) {
		((HoehenlinienTableModel) getModel()).refresh(dao);
	}

	public void refresh() {
		((HoehenlinienTableModel) getModel()).refresh();
	}

	public boolean isEmpty() {
		return ((HoehenlinienTableModel) getModel()).isEmpty();
	}

	public void highlightCell(int row, int column) {
		renderer.highlightCell(row, column);
		refresh();
	}

	/**
	 * Highlighting der Zellen aufheben.
	 */
	public void resetHighlighting() {
		renderer.reset();
		refresh();
	}

}
